外观
2024年9月 GESP C++ 二级真题解析
一、单选题 (每题2分,共30分)
单选题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | A | C | A | C | C | D | A | A | C | B | C | A | A | B | A |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成,设计存贮周期为 (微秒)。那么该磁心存储元件相当于现代计算机的()。
A. 内存 B. 磁盘 C. CPU D. 显示器
查看解析
答案:A
考纲知识点: 计算机历史、计算机硬件
解析: 磁心存储器是早期计算机中使用的一种随机存取存储器(RAM),其功能与现代计算机中的内存条相同,用于临时存放程序和数据。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. IPv4版本的因特网总共有()个A类地址网络。
A. 65000 B. 200万 C. 126 D. 128
查看解析
答案:C
考纲知识点: 计算机网络基础
解析: IPv4的A类地址范围是1.0.0.0到127.255.255.255。网络号占第一个字节,但0和127是特殊地址(0代表本机,127代表环回测试),所以可用的A类网络号是从1到126,共126个。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 在C++中,下列不可做变量的是()。
A. ccf-gesp B. ccf_gesp C. ccfGesp D. _ccfGesp
查看解析
答案:A
考纲知识点: 变量的定义与使用
解析: C++变量名中不能包含连字符-。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 在C++中,与for(int i = 1; i < 10; i++)效果相同的是()。
A. for (int i = 0; i < 10; i++) B. for (int i = 0; i < 11; i++) C. for(int i = 1; i < 10; ++i) D. for(int i = 0; i < 11; ++i)
查看解析
答案:C
考纲知识点: 循环结构
解析: 原循环遍历1到9。++i(前置自增)和i++(后置自增)在for循环的迭代表达式中效果是等价的。C选项也遍历1到9。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 在C++中,cout<<(5/2+5%3);的输出是()。
A. 1
B. 2 C. 4 D. 5
查看解析
答案:C
考纲知识点: 基本运算
解析: 5/2是整除,结果是2。5%3是取余,结果是2。2+2结果是4。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 假定变量a和b可能是整型、字符型或浮点型,则下面C++代码执行时先后输入-2和3.14后,其输出不可能是()。
cpp
#include <iostream>
using namespace std;
int main() {
// a和b的类型未知
// cin >> a;
// cin >> b;
// cout << (a + b);
return 0;
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
A. 1 B. 1.14 C. 47 D. 将触发异常
查看解析
答案:D
考纲知识点: 数据类型与输入输出
解析:
- 若a为
int,b为double:a读入-2,b读入3.14。a+b结果是1.14。B可能。 - 若a为
int,b为int:a读入-2,b读入3(.14留在缓冲区)。a+b结果是1。A可能。 - 若a为
char,b为double:a读入-的ASCII码45,b读入2。a+b结果是47。C可能。cin在读取不同类型数据时有很强的适应性,一般不会因为输入格式问题触发异常。所以D最不可能。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 在C++代码中假设N为正整数,则下面代码能获得个位数的是()。
A. N % 10 B. N / 10 C. N && 10 D. 以上选项均不正确
查看解析
答案:A
考纲知识点: 基本运算
解析: 对10取余(% 10)是获取一个整数个位数的标准方法。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面C++代码执行后的输出是()。
cpp
#include <iostream>
using namespace std;
int main() {
int i;
for (i = 0; i < 10; i++) {
if (i % 2)
break;
cout << "0#";
}
if(i == 10)
cout << "1#";
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
A. 0# B. 1# C. 0#0#1 D. 没有输出
查看解析
答案:A
考纲知识点: 循环与break
解析:
i=0:0%2是0(假),输出0#。i=1:1%2是1(真),执行break,循环终止。- 此时
i的值是1,i==10不成立,后面的if不执行。 - 最终输出是
0#。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 执行下面C++代码并输入1和0,有关说法正确的是()。
cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b; // a=1, b=0
if (a && b)
cout << ("1");
else if (!(a || b))
cout << ("2");
else if (a || b)
cout << ("3");
else
cout << ("4");
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A. 1
B. 2 C. 3 D. 4
查看解析
答案:C
考纲知识点: 逻辑运算
解析: 输入a=1, b=0。
if (a && b)->if (1 && 0)->if (false)else if (!(a || b))->else if (!(1 || 0))->else if (!(true))->else if (false)else if (a || b)->else if (1 || 0)->else if (true)。条件成立,输出"3"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面C++代码执行后的输出是()。
cpp
#include <iostream>
using namespace std;
int main() {
int loopCount = 0;
for(int i = 1; i < 5; i += 2) {
loopCount += 1;
}
cout << (loopCount);
return 0;
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
A. 1 B. 2 C. 3 D. 5
查看解析
答案:B
考纲知识点: 循环结构
解析: i的取值:
- 初始
i=1,1<5成立,loopCount变为1。i增加2变为3。 i=3,3<5成立,loopCount变为2。i增加2变为5。i=5,5<5不成立,循环结束。loopCount最终为2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 下图是C++程序执行后的输出。为实现其功能,横线处应填入代码是()。
(图显示一个数字金字塔)
cpp
#include <iostream>
using namespace std;
int main() {
int lineNum;
cin >> lineNum;
for (int i = 1; i < lineNum + 1; i++) {
for(int j = ________) {
cout << j << " ";
}
cout << endl;
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
A. j = i; j < i; j++ B. j = 1; j < i; j++ C. j = i; j < i*2; j++ D. j = i + 1; j < i + i; j++
查看解析
答案:C
考纲知识点: 循环嵌套
解析: 根据图中的输出,第i行是从i开始的i个数字。 例如i=3时,输出3 4 5。j要从i开始,循环i次。
- A:
j=i; j<i;循环0次。 - B: 从1开始,不符。
- C:
j从i开始,j < i*2等价于j <= i*2-1。循环变量j取值i, i+1, ..., 2*i-1,共i个数字。正确。 - D: 从
i+1开始,不符。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 下面C++代码执行后输出逆序数,如输入123则输出321。如输入120则输出21。横线处先后应填入的代码是()。
cpp
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int rst = 0;
while (N) {
________
________
}
cout << (rst);
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
A. rst = rst * 10 + N % 10; N = N / 10; B. rst += N % 10; N = N / 10; C. rst = rst * 10 + N / 10; N = N % 10; D. rst += N / 10; N = N % 10;
查看解析
答案:A
考纲知识点: 问题分解、循环结构
解析: 这是整数反转的标准算法。 第一行:N%10取出个位,rst*10将已有结果左移一位,然后相加,实现将取出的数位拼接到rst的末尾。 第二行:N/10去掉N的个位数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 下面的C++代码用于输入学生成绩,并根据人数计算出平均成绩,有关说法错误的是()。
cpp
#include <iostream>
using namespace std;
int main() {
float Sum = 0;
int cnt = 0;
while (1) {
int score;
cin >> score;
if (score < 0)
break;
cnt += 1;
Sum += score;
}
cout << "总学生数:" << cnt << "平均分:" << Sum / cnt;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A. 代码while(1)写法错误。 B. 如果输入负数,将结束输入,并正确输出。 C. 如果输入的学生成绩含有小数,程序将无法正常执行。 D. 变量int score初始值不确定,但不影响程序执行。
查看解析
答案:A
考纲知识点: 循环结构、程序健壮性
解析:
- A:
while(1)是合法的无限循环,通常与break配合使用,这是一种常见的编程模式。所以说它写法错误是不对的。 - B:
if(score < 0) break;实现了输入负数结束循环的功能。正确。 - C:
score是int类型,如果输入小数(如95.5),cin只会读取整数部分95,.5会留在输入流中,可能影响下一次读取,导致程序行为异常。正确。 - D:
score在循环内定义,每次循环都会从cin获取新值,不需要初始值。正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 以下C++代码判断输入的正整数是否为质数...请在横线上填写代码。()
cpp
#include <iostream>
using namespace std;
int main() {
int num, i;
cin >> num;
for(i = 2; i < num; i++) {
if (________) {
cout << ("NO");
break;
}
}
if (i == num)
cout << ("YES");
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A. num % i B. num % i == 0 C. num / i D. num / i == 0
查看解析
答案:B
考纲知识点: 素数判断
解析: 判断质数的逻辑是看它是否能被1和自身以外的数整除。循环从2遍历到num-1,如果发现任何一个i能整除num(即num % i == 0),那么num就不是质数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 一个数如果能被某个数(比如7)整除,或者含有该数,则说该数是某个数的相关数。下面C++代码用于判定输入的数与7是否有关。下列说法错误的是()。
cpp
// 原始代码逻辑复杂且有误,这里用正确逻辑改写
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int M = N;
bool Flag = false;
if (N % 7 == 0) {
Flag = true;
}
while (M > 0) {
if (M % 10 == 7) {
Flag = true;
break;
}
M /= 10;
}
if (Flag)
cout << N << "与7有关";
else
cout << N << "与7无关";
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
A. 删除break语句不会导致死循环,但有时会导致结果错误。 B. 删除M /= 10;将可能导致死循环。 C. 删除M = N;并将其后代码中的M变量改为N,并调整输出同样能完成相关功能。 D. 删除break语句不会导致死循环,但有时会影响效率。
查看解析
答案:A
考纲知识点: 程序逻辑、循环
解析:
- B:
M /= 10是循环的迭代条件,删除它会导致while(M)在M非0时无限循环。正确。 - C: 将M改为N,
while循环会修改N,导致最后输出时N已变为0。需要调整输出,但能完成功能。正确。 - D:
break用于找到数字7后提前退出,删除它只是多做一些无用功,影响效率。正确。 - A: 删除
break不会导致结果错误,因为Flag一旦设为true就不会再变回false。所以A的说法错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题 (每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | × | √ | × | × | √ | × | √ | √ | × |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. C++是一门面向对象的编程语言,也是一门高级语言.。
查看解析
答案:√
考纲知识点: 程序基本概念
解析: C++是支持面向对象编程范式的高级编程语言。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 在C++中,cout << (3, 4, 5);可以输出345.。
查看解析
答案:×
考纲知识点: 逗号运算符
解析: (3, 4, 5)使用了逗号运算符,它会依次计算表达式,并返回最后一个表达式的值。所以cout接收到的值是5,只会输出5。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. C++表达式12 % 10 % 10的值为2.。
查看解析
答案:√
考纲知识点: 基本运算
解析: 从左到右计算,12 % 10结果是2,然后2 % 10结果还是2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. C++语句cout << rand() << ' ' << rand();的第二个输出值较大.。
查看解析
答案:×
考纲知识点: 标准库函数
解析: rand()产生的是伪随机数,连续两次调用产生的值之间没有必然的大小关系。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 定义C++的int类型的变量ch,而且值为'1',则语句cout << int(ch);的输出为1.。
查看解析
答案:×
考纲知识点: ASCII码
解析: int ch = '1';这条语句是将字符'1'的ASCII码值赋给ch。'1'的ASCII码是49,所以ch的值是49,输出也是49。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面C++代码执行后将输出10.。
cpp
#include <iostream>
using namespace std;
int main() {
int i;
for(i = 0; i < 10; i++)
continue;
if (i == 10)
cout << i;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
查看解析
答案:√
考纲知识点: 循环与continue
解析: continue跳过循环体,但i++正常执行。循环结束后,i的值是10。if(i==10)成立,输出10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面C++代码能求整数N和M之间所有整数之和,包含N和M.。
cpp
#include <iostream>
using namespace std;
int main() {
int N, M, Sum; // Sum未初始化
cin >> N >> M;
if (N > M) {
int tmp = N;
N = M;
M = tmp;
}
for(int i = N; i < M + 1; i++)
Sum += i;
cout << Sum;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
查看解析
答案:×
考纲知识点: 变量初始化
解析: 变量Sum没有被初始化为0。它的初始值是随机的,所以最终累加的结果是错误的。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 将下面C++代码中的L3标记的代码行调整为for(int i = 0; i < 5; i++)后输出结果相同.。
cpp
#include <iostream>
using namespace std;
int main() {
int loopCount = 0;
for(int i = 1; i < 5; i++) { //L3
for(int j = 0; j < i; j++)
loopCount += 1;
}
cout << loopCount;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
查看解析
答案:√
考纲知识点: 循环嵌套
解析: 原循环i取1,2,3,4。内循环执行次数为 1+2+3+4=10。 修改后i取0,1,2,3,4。内循环执行次数为 0+1+2+3+4=10。 总执行次数相同,loopCount结果相同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 某一系列数据的规律是从第3个数值开始是前两个数之和。下面的代码求第N个数的值,N限定为大于2.。
cpp
#include <iostream>
using namespace std;
int main() {
int start1, start2, N, tmp;
cin >> start1 >> start2 >> N;
for(int i = 2; i < N; i++) {
tmp = start1 + start2;
start1 = start2;
start2 = tmp;
}
cout << start2;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
查看解析
答案:√
考纲知识点: 斐波那契数列、循环模拟
解析: 这是计算斐波那契数列第N项的经典迭代算法。逻辑正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面C++代码执行时如果输入2024,则输出是4202.。
cpp
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int flag = 0;
while (N) {
if (!flag)
cout << N % 10;
N /= 10;
flag = (flag + 1) % 2;
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
查看解析
答案:×
考纲知识点: 程序模拟
解析: flag的值在0和1之间交替。!flag只在flag为0时为真。
- N=2024, flag=0:
!flag真,输出4。N=202, flag=1。 - N=202, flag=1:
!flag假,不输出。N=20, flag=0。 - N=20, flag=0:
!flag真,输出0。N=2, flag=1。 - N=2, flag=1:
!flag假,不输出。N=0, flag=0。 - 循环结束。最终输出是
40。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题 (每题25分,共50分)
1. 数位之和
问题描述
小杨有n个正整数,他认为一个正整数是美丽数字当且仅当该正整数每一位数字的总和是7的倍数。小杨想请你编写一个程序判断n个正整数哪些是美丽数字。
输入格式
第一行包含一个正整数n,代表正整数个数。 之后n行,每行包含一个正整数。
输出格式
对于每个正整数,如果是美丽数字则输出Yes,否则输出No。
数据范围
1 <= n <= 10^5, 1 <= ai <= 10^5。
样例1
3
7
52
1031
2
3
4
2
3
4
样例1输出
Yes
Yes
No1
2
3
2
3
解题思路
查看解题思路
题目大意: 对n个输入的数,分别判断其各位数之和是否为7的倍数。
考纲知识点: 循环结构、问题分解。
解题步骤:
- 外层循环:读取n,然后用一个
for或while循环执行n次。 - 内层处理(对每个数x):
- 读取一个数
x。 - 定义一个和变量
sum并初始化为0。 - 用一个
while循环处理x的每一位:sum += x % 10;将个位数加到sum上。x /= 10;去掉个位数。
- 循环结束后,判断
sum % 7 == 0是否成立。 - 根据判断结果输出"Yes"或"No"。
- 读取一个数
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
using namespace std;
void solve() {
int x;
cin >> x;
int temp = x;
int sum = 0;
while (temp > 0) {
sum += temp % 10;
temp /= 10;
}
if (sum % 7 == 0) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
int main() {
int n;
cin >> n;
while (n--) {
solve();
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 小杨的N字矩阵
问题描述
小杨想要构造一个m x m的N字矩阵(m为奇数),这个矩阵的从左上角到右下角的对角线、第1列和第m列都是半角加号+,其余都是半角减号-。例如,一个5x5的N字矩阵如下:
+---+
++--+
+-+-+
+--++
+---+1
2
3
4
5
2
3
4
5
输入格式
第一行包含一个正整数m (3 <= m <= 49且m为奇数)。
输出格式
输出对应的N字矩阵。
解题思路
查看解题思路
题目大意: 根据规则打印一个m*m的字符矩阵。
考纲知识点: 循环嵌套、条件判断。
解题步骤:
- 读取m:读取奇数m。
- 双重循环:使用两层
for循环遍历矩阵的每个位置(i, j)(i为行,j为列,都从1到m)。 - 条件判断:在内层循环中,根据
(i, j)的位置决定输出字符。- 如果
j == 1(第一列)或j == m(最后一列)或i == j(主对角线),则打印+。 - 否则,打印
-。
- 如果
- 换行:每打印完一行后,输出一个换行符。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <iostream>
using namespace std;
int main() {
int m;
cin >> m;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
if (j == 1 || j == m || i == j) {
cout << "+";
} else {
cout << "-";
}
}
cout << endl;
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限